package com.example.study4;

public class CodeBlockExecutionOrder {
    // 静态变量
    private static String staticField = "静态变量初始化";

    // 实例变量
    private String instanceField = "实例变量初始化";

    // 静态代码块
    static {
        System.out.println("1. 静态代码块执行");
        System.out.println("   静态变量值: " + staticField);
    }

    // 实例代码块
    {
        System.out.println("3. 实例代码块执行");
        System.out.println("   实例变量值: " + instanceField);
        System.out.println("   静态变量值: " + staticField);
    }

    // 构造方法
    public CodeBlockExecutionOrder() {
        System.out.println("4. 构造方法执行");
    }

    // 普通方法中的代码块
    public void method() {
        System.out.println("5. 方法开始执行");
        {
            System.out.println("6. 普通代码块执行");
            int localVar = 100;// 局部变量，作用域仅限于代码块内部
            System.out.println("   局部变量值: " + localVar);
        }
        System.out.println("7. 方法结束执行");
    }

    public static void main(String[] args) {
        System.out.println("2. main方法开始执行");

        // 创建对象
        CodeBlockExecutionOrder obj = new CodeBlockExecutionOrder();

        // 调用方法
        obj.method();

        System.out.println("8. 程序结束");
    }
}
/*
运行结果：
1. 静态代码块执行
   静态变量值: 静态变量初始化
2. main方法开始执行
3. 实例代码块执行
   实例变量值: 实例变量初始化
   静态变量值: 静态变量初始化
4. 构造方法执行
5. 方法开始执行
6. 普通代码块执行
   局部变量值: 100
7. 方法结束执行
8. 程序结束
*/